package nix.spring.aop;

import org.aspectj.lang.ProceedingJoinPoint;

public class MyAdvice {

	/**
	 * 前置通知：目标方法运行之前调用
	 */
	public void before() {
		System.out.println("前置通知！");
	}
	
	/**
	 * 后置通知（如果方法出现异常不调用）：目标方法运行之后调用
	 */
	public void afterReturning() {
		System.out.println("后置通知（如果方法出现异常不调用）！");
	}
	
	/**
	 * 环绕通知：在目标方法调用之前和之后调用，目标方法需要手动调用
	 */
	public Object around(ProceedingJoinPoint pjp) throws Throwable {
		System.out.println("环绕通知之前！");
		Object proceed = pjp.proceed();
		System.out.println("环绕通知之后！");
		return proceed;
	}
	
	/**
	 * 异常通知：出现异常时调用
	 */
	public void afterException() {
		System.out.println("异常通知");
	}
	
	/**
	 * 后置通知（出现异常也会调用）：
	 */
	public void after() {
		System.out.println("后置通知（出现异常也会调用）");
	}
}
